New versions of software are constantly being created, and sometimes users wait through multiple versions before upgrading or converting to a more current iteration of the software. The user may also demand the ability to return or revert to the old version of the software if they discover a problem after use for a period of time. This multiple version conversion and reversion process becomes more complicated with each new release. Much of the updating may need to be done manually, often involving time consuming procedures. Newer software packages are able to make the upgrades without requiring manual steps. Nevertheless, because of this complexity, the recovery from system failures during the reversion process is limited to restoring the data files from archive, and starting over with the conversion.
In the case of a server, such as the IBM Informix Dynamic Server (IDS), (described in more detail at www-306.ibm.com/software/data/informix/ids., the entire contents of which is incorporated herein), multiple databases are hosted by the server, each database having its own system catalog. The implementation of a conversion typically requires development to keep growing a small set of files with new functions, and modifying a common set of utility functions with new code that is conditionally executed. The version information is finally updated when the final version is reached. Because of the large number of changes that are required during conversion, long transactions must be prevented by breaking them up into multiple transactions. This, in turn, leads to thousands of states that were not clearly identifiable. In the event of a system failure, recovery and restart are rendered difficult, if not impossible. Failure requires reload from backup (if available), and starting over.